/*
 * BotoneraManager.java
 * Copyright (C) 2007 by Ezequiel Turovetzky
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 3
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, see <http://www.gnu.org/licenses/>.
 */
package ar.com.botonera.config;

import java.util.Locale;
import java.util.ResourceBundle;

/**
 * Administrador de las propiedadas de la aplicaci&oacute;n.
 * <br>
 * Toma las propiedades desde el archivo <code>botonera.properties</code>.
 * @author <a href="mailto:tezequiel@gmail.com">Ezequiel Turovetzky</a>
 * @version 1.0
 */
public class BotoneraManager {

    //~ Static fields/initializers ---------------------------------------------

    /** La unica instancia de esta clase */
    private static BotoneraManager instance;

    //~ Instance fields --------------------------------------------------------

    /** Bundle */
    private ResourceBundle bundle;

    //~ Constructors -----------------------------------------------------------

    /**
     * Crea una nueva instancia de esta clase.
     */
    private BotoneraManager() {
        bundle = ResourceBundle.getBundle("botonera", Locale.getDefault());
    }

    //~ Methods ----------------------------------------------------------------

    /**
     * Devuelve la &uacute;nica instancia de esta clase.
     * @return La &uacute;nica instancia de esta clase.
     */
    public static BotoneraManager getInstance() {
        if(instance == null) {
            instance = new BotoneraManager();
        }
        return instance;
    }

    /**
     * Devuelve el valor de la propiedad especificada.
     * @param property Propiedad cuyo valor se desea obtener.
     * @return El valor de la propiedad.
     */
    public String get(String property) {
        return bundle.getString(property);
    }
    
    /**
     * Devuelve el valor de la propiedad especificada.
     * <br>Permite una lista variables de argumentos a ser
     * reemplazados en el valor de la propiedad.
     * <br>Por ejemplo:
     * <code>ar.com.botonera.mensaje = Hola, me llamo {0} y tengo {1} años</code>
     * <br>Se puede obtener como:
     * <br>
     * <pre>
     * 			BotoneraManager.getInstance().get("ar.com.botonera.mensaje", "Tux", "10");
     * </pre>
     * <br>Esto devolver&aacute;: <i>Hola, me llamo Tux y tengo 10 años</i>
     * @param property Propiedad cuyo valor se desea obtener.
     * @param args Argumentos para reemplazar en el valor de la propiedad.
     * @return El valor de la propiedad.
     */
    public String get(String property, Object... args) {
    	String value = get(property);
    	for(int index = 0; index < args.length; index++) {
    		Object arg = args[index];
    		String secuence = "{" + index + "}";
    		value = value.replace(secuence, arg != null ? arg.toString() : "null");
    	}
    	return value;
    }
}
